package com.sky.service.impl;

import com.sky.constant.StatusConstant;
import com.sky.context.BaseContext;
import com.sky.entity.AddressBook;
import com.sky.mapper.AddressBookMapper;
import com.sky.service.AddressBookService;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class AddressBookServiceImpl implements AddressBookService {
  private final AddressBookMapper addressBookMapper;
  
  public AddressBookServiceImpl(AddressBookMapper addressBookMapper) {
    this.addressBookMapper = addressBookMapper;
  }
  
  /**
   * 保存地址簿信息。
   * @param addressBook 要保存的地址簿对象，包含用户ID、收货人、电话等详细信息
   */
  @Override
  public void save(AddressBook addressBook) {
    addressBook.setUserId(BaseContext.getCurrentId());
    addressBook.setIsDefault(StatusConstant.DISABLE);
    addressBookMapper.insert(addressBook);
  }
  
  /**
   * 获取当前用户的地址簿列表。
   * @return 返回指定用户的地址簿列表
   */
  @Override
  public List<AddressBook> list() {
    Long userId = BaseContext.getCurrentId();
    return addressBookMapper.list(userId);
  }
  
  /**
   * 查找当前用户的默认地址簿信息。
   * @return
   */
  @Override
  public AddressBook findDefault() {
    AddressBook addressBook = AddressBook.builder()
                                          .userId(BaseContext.getCurrentId())
                                          .isDefault(StatusConstant.ENABLE)
                                          .build();
    return addressBookMapper.findDefaultAddress(addressBook);
  }
  
  /**
   * 将指定ID的地址簿设置为默认地址。
   * @param id 要设为默认的地址簿ID
   */
  @Override
  public void setDefault(Long id) {
    AddressBook addressBook = AddressBook.builder()
                                          .id(id)
                                          .userId(BaseContext.getCurrentId())
                                          .build();
    addressBookMapper.setDefaultAddress(addressBook);
    
  }
  
  /**
   * 更新指定的地址簿信息。
   * @param addressBook 要更新的地址簿对象，包含如收货人、电话等详细信息
   */
  @Override
  public void update(AddressBook addressBook) {
    addressBookMapper.update(addressBook);
  }
  
  /**
   * 根据给定的ID查找地址簿信息。
   * @param id 要查找的地址簿记录的ID
   * @return 返回与给定ID匹配的地址簿对象，如果未找到则返回null
   */
  @Override
  public AddressBook findById(Long id) {
    return addressBookMapper.findById(id);
  }
  
  /**
   * 根据指定的ID删除地址簿中的记录。
   * @param id 要删除的地址簿记录的ID
   */
  @Override
  public void delById(Long id) {
    addressBookMapper.delById(id);
  }
}
